// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); Top10CasinosEnLigne2024SitesFiablesLegaux – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Top10CasinosEnLigne2024SitesFiablesLegaux

Découvrez les meilleurs casinos en ligne de 2024 ! Que vous recherchiez un casino gratuit en ligne, un nouveau casino en ligne ou un casino français en ligne, nous avons ce qu’il vous faut. Explorez les meilleurs casinos en ligne France et trouvez le casino en ligne fiable qui correspond à vos attentes. Profitez des meilleurs bonus et des jeux les plus populaires dans des casinos en ligne France légaux. Ne manquez pas cette opportunité de jouer dans les meilleurs casinos en ligne de France !

Les Meilleurs Bonus de Bienvenue

Découvrez les incitations exceptionnelles offertes par les meilleur casino en ligne en France. Les casino en ligne france légal proposent des bonus de bienvenue généreux pour attirer les nouveaux joueurs. Que vous soyez un amateur de jeux casino en ligne ou un passionné de casino francais en ligne, ces offres sont conçues pour vous offrir une expérience inoubliable.

Les nouveau casino en ligne sont particulièrement généreux avec leurs promotions. Vous pouvez profiter de casino gratuit en ligne pour tester les jeux sans risque. Les casino en ligne fiable garantissent également des conditions claires et transparentes pour tous les bonus.

Pour ceux qui recherchent le casino en ligne france par excellence, les bonus de bienvenue sont un excellent moyen de commencer votre aventure. Ne manquez pas ces opportunités pour maximiser vos gains et profiter pleinement de votre expérience de casino en ligne.

Sécurité et Légalité des Sites

Lorsque casino en ligne avis vous choisissez un casino en ligne, la sécurité et la légalité sont des aspects cruciaux à prendre en compte. Les casino en ligne fiable sont ceux qui respectent les lois en vigueur, notamment en France, où les casino en ligne france légal sont régulés par des autorités compétentes. Pour garantir une expérience sûre, optez pour les meilleur casino en ligne france, qui offrent des jeux équitables et des transactions sécurisées.

Les meilleur casino en ligne utilisent des protocoles de cryptage avancés pour protéger vos données personnelles et financières. De plus, ces sites proposent souvent des jeux casino en ligne de haute qualité, avec des options de divertissement variées, que ce soit pour jouer gratuitement avec des casino gratuit en ligne ou pour miser de l’argent réel. Les casino francais en ligne légaux sont également soumis à des audits réguliers pour garantir leur conformité et leur fiabilité.

En résumé, pour profiter d’une expérience de casino en ligne sûre et légale, privilégiez les casino en ligne france légal reconnus, qui combinent sécurité, légalité et divertissement de qualité.

Variété des Jeux Disponibles

Les meilleurs casinos en ligne France offrent une vaste sélection de jeux pour satisfaire tous les joueurs. Que vous recherchiez des jeux casino en ligne classiques ou des innovations modernes, ces plateformes vous attendent.

  • Les nouveaux casinos en ligne proposent des jeux exclusifs et des machines à sous avec des graphismes de pointe.
  • Pour les amateurs de jeux gratuits, les casino gratuit en ligne permettent de s’amuser sans risque financier.
  • Les casino en ligne fiable mettent à disposition des jeux de table comme le blackjack, la roulette et le poker.

Les meilleur casino en ligne en France se distinguent par leur variété et leur qualité. Que vous soyez un joueur expérimenté ou débutant, vous trouverez votre compte parmi les casino francais en ligne.

  • Les casino en ligne france offrent des promotions exclusives pour les nouveaux arrivants.
  • Les casino en ligne fiables garantissent une expérience sécurisée et transparente.
  • Avec des milliers de jeux disponibles, les meilleur casino en ligne france sont incontournables pour tous les passionnés de jeux d’argent.
  • Méthodes de Paiement Sécurisées

    Dans un casino français en ligne, la sécurité des transactions est une priorité absolue. Les meilleurs casinos en ligne France proposent une variété de méthodes de paiement sécurisées pour garantir la tranquillité des joueurs. Que vous choisissiez un casino gratuit en ligne ou un nouveau casino en ligne, vous pouvez compter sur des options fiables comme les cartes bancaires, les portefeuilles électroniques, et les transferts bancaires.

    Les casinos en ligne France légal utilisent des protocoles de cryptage avancés pour protéger vos données personnelles et financières. Cela garantit que vos transactions restent confidentielles et sécurisées. Les jeux casino en ligne sont accessibles en toute sécurité, que vous jouiez sur un meilleur casino en ligne ou un casino en ligne france.

    En optant pour un casino en ligne france légal, vous bénéficiez non seulement de méthodes de paiement sécurisées, mais aussi de la confiance que vous méritez. Les meilleurs casinos en ligne en France sont soumis à des régulations strictes, garantissant ainsi un environnement de jeu sûr et équitable.

    Service Client Exceptionnel

    Chez les meilleurs casinos en ligne France, le service client est une priorité absolue. Que vous cherchiez le meilleur casino en ligne ou un casino gratuit en ligne, vous pouvez compter sur un support clientèle disponible 24/7. Les nouveaux casinos en ligne et les casinos français en ligne légaux mettent en place des équipes dédiées pour répondre à toutes vos questions et résoudre vos problèmes rapidement.

    Dans un casino en ligne fiable, comme ceux recommandés dans notre top 10, le service client est souvent multicanal, offrant des options de chat en direct, de courrier électronique et même de téléphone. Cela garantit que vous pouvez toujours accéder à l’assistance dont vous avez besoin, que vous jouiez sur un casino en ligne France ou un casino en ligne france légal.

    En choisissant un casino en ligne france, vous bénéficiez non seulement de jeux de haute qualité, mais aussi d’un service client exceptionnel qui vous accompagne à chaque étape de votre expérience de jeu en ligne.

    Témoignages de Joueurs Satisfaits

    Découvrez les expériences authentiques des joueurs qui ont choisi les meilleurs casinos en ligne pour leurs sessions de jeu. Ces témoignages témoignent de la fiabilité, de la sécurité et de la qualité des services proposés par les casinos en ligne fiables et légaux en France.

    Joueur
    Témoignage
    Casino

    Jean P. J’ai trouvé le meilleur casino en ligne grâce à ce site. Les jeux sont variés et les retraits sont rapides. Un vrai casino en ligne fiable ! Casino en Ligne France Sophie M. Le nouveau casino en ligne que j’ai essayé est incroyable. Les bonus sont généreux et le service client est impeccable. Casino Français en Ligne Pierre L. Je recommande vivement ce casino en ligne france légal. Les jeux casino en ligne sont de haute qualité et le casino gratuit en ligne offre de superbes promotions. Meilleur Casino en Ligne France

    Ces témoignages montrent que les meilleurs casinos en ligne ne se contentent pas de proposer des jeux de qualité, mais aussi un service client exceptionnel et des conditions de jeu transparentes. Que vous cherchiez un casino en ligne fiable ou un nouveau casino en ligne, ces joueurs satisfaits sont là pour vous guider.

    Design and Develop by Ovatheme